package com.ly.heart.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ly.common.core.domain.AjaxResult;
import com.ly.heart.activiti.pojo.ProcessModel;
import com.ly.heart.domain.ActModelEntity;
import com.ly.heart.domain.dto.*;
import com.ly.common.core.domain.ActCurrentTaskVo;
import com.ly.common.core.domain.BaseVo;

import java.io.IOException;

public interface IActModelService extends IService<ActModelEntity>{

    /**
     * @param processModel 流程对象
     * @return
     */
    AjaxResult deployActByNode(ProcessModel processModel) throws IOException;

    /**
     * 查询流程模型列表，带分页
     * @param queryDto
     * @return
     */
    AjaxResult getActModelPageList(ActModelQueryDto queryDto);

    /**
     * 查询流程模型列表,不分页
     * @param queryDto
     * @return
     */
    AjaxResult getActModelList(ActModelQueryDto queryDto);

    /**
     * 挂起/激活流程
     */
    AjaxResult suspendOrActiveApply(SuspendOrActiveDto activeDto);

    /**
     * 删除流程定义
     * @param id
     * @return
     */
    AjaxResult delActModelByDeployId(String id);

    /**
     * 根据菜单ID获取流程模型
     * @param menuId
     * @return
     */
    AjaxResult getActModelByMenuId(String menuId);

    /**
     * 获取菜单下拉选择
     * @return
     */
    AjaxResult getMenuOption();

    /**
     * 根据角色ID获取待办任务
     * @return
     */
    AjaxResult getTasksByRoleId(ActTaskQueryDto queryDto);

    /**
     * 根据实例id查看表单详情数据
     * @param instanceId
     * @return
     */
    AjaxResult getBusinessDataByInstanceId(String instanceId);

    /**
     * 根据角色ID获取已办任务
     * @return
     */
    AjaxResult getCompletedTasksByRoleId(ActTaskQueryDto queryDto);

    /**
     * 查询自己发起的任务
     * @return
     */
    AjaxResult getTaskByUserId(BaseVo baseVo);

    /**
     * 任务审批
     * @param completeDto
     * @return
     */
    AjaxResult completeTaskByTaskId(ActTaskCompleteDto completeDto);

    /**
     * 根据流程实例id获取所有的任务
     * @param instanceId
     * @return
     */
    AjaxResult getTasksByInstanceId(String instanceId);

    /**
     * 业务流程启动通用方法
     * @param startDto
     * @return
     */
    String startProcess(StartProcessDto startDto);

    /**
     * 根据流程实例id获取当前任务信息
     * @param instanceId
     * @return
     */
    ActCurrentTaskVo getCurrentTaskByInstanceId(String instanceId);
}
